package snowflake

import (
	"errors"
	"github.com/sony/sonyflake"
	"time"
)

var (
	sonyFlake     *sonyflake.Sonyflake // 实例
	sonyMachineID uint16               // 机器ID
)

// Init ---> 初始化一个 *snoyflake.Sonyflake实例 ---> snoyFlake
// 需传入当前的机器ID
func Init(machineId uint16) {
	sonyMachineID = machineId

	t, _ := time.Parse("2006-01-02", "2023-03-06") // 初始化一个开始的时间
	settings := sonyflake.Settings{                // 生成全局配置
		StartTime: t,
		MachineID: getMachineID, // 指定机器ID
	}

	sonyFlake = sonyflake.NewSonyflake(settings) // 用配置生成sonyflake节点
}

// 返回全局定义的机器ID
func getMachineID() (uint16,error) {
	return sonyMachineID,nil
}

// GetID 返回生成的id值
func GetID() (id uint64,err error) { // 拿到sonyFlake节点生成id值
	if sonyFlake == nil {
		err := errors.New("snoy flake not inited")
		panic(any(err))
	}

	id, err = sonyFlake.NextID()
	return id,err
}